package com.lefevre.cms.bean.user;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.*;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;

/**
 * 用户自定义注册功能项
 *
 * @author Lefevre
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("user_custom")
@Entity
@Table(name = "user_custom")
public class UserCustom implements Serializable {
    private static final long serialVersionUID = 8548112564604596810L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @TableId(type = IdType.INPUT)
    private Integer id;

    /**
     * 注册项名称
     **/
    @Column(length = 50)
    private String name;

    /**
     * 是否必填
     **/
    private boolean required = false;

    /**
     * 后台可搜索
     **/
    private boolean search = false;

    /**
     * 是否显示
     **/
    @Column(name = "\"visible\"")
    private boolean visible = true;

    /**
     * 选框类型  1.输入框 2.单选按钮  3.多选按钮 4.下拉列表  5.文本域textarea
     **/
    private Integer chooseType = 1;

    /**
     * 参数值  json LinkedHashMap<String,String>格式
     **/
    @Lob
    @Column(name = "\"value\"")
    private String value;

    /**
     * 参数值
     **/
    @Transient
    @TableField(exist = false)
    private LinkedHashMap<String, String> itemValue = new LinkedHashMap<String, String>();

    /**
     * 字段过滤方式  0.无  1.只允许输入数字  2.只允许输入字母  3.只允许输入数字和字母  4.只允许输入汉字  5.正则表达式过滤
     **/
    private Integer fieldFilter = 0;

    /**
     * 输入框的宽度
     **/
    private Integer size;

    /**
     * 输入框中字符的最大长度
     **/
    private Integer maxlength;

    /**
     * 是否可选择多个选项 true: multiple='multiple'  false:
     **/
    private boolean multiple;

    /**
     * 下拉列表中可见选项的数目
     **/
    private Integer selete_size;

    /**
     * 文本域内的可见行数
     **/
    @Column(name = "\"rows\"")
    private Integer rows;

    /**
     * 文本域内的可见宽度
     **/
    private Integer cols;

    /**
     * 过滤正则表达式
     **/
    @Lob
    private String regular;

    /**
     * 提示 Tip cue
     **/
    @Column(length = 250)
    private String tip;

    /**
     * 排序
     **/
    private Integer sort = 0;

    /**
     * 用户自定义注册功能项用户输入值
     **/
    @Transient
    @TableField(exist = false)
    private List<UserInputValue> userInputValueList = new ArrayList<>();

    public void addUserInputValue(UserInputValue userInputValue) {
        this.userInputValueList.add(userInputValue);
    }

}
